// mathjax-formula.ts
Component({
  properties: {
    formula: {
      type: String,
      value: '',
      observer: function(newVal) {
        this.processFormula(newVal)
      }
    },
    isBlock: {
      type: Boolean,
      value: false
    }
  },
  data: {
    displayText: ''
  },
  methods: {
    processFormula(formula: string) {
      if (!formula) {
        this.setData({ displayText: '' })
        return
      }
      
      // 将 LaTeX 转换为可读的文本格式
      let text = formula.trim()
      
      // 处理常用数学符号和命令
      text = text.replace(/\\mathbf\{([^}]+)\}/g, '$1')
      text = text.replace(/\\mathcal\{([^}]+)\}/g, '$1')
      text = text.replace(/\\mathbb\{([^}]+)\}/g, '$1')
      text = text.replace(/\\text\{([^}]+)\}/g, '$1')
      
      // 处理函数名
      const functions = ['log', 'ln', 'exp', 'sin', 'cos', 'tan', 'sec', 'csc', 'cot', 
                         'arcsin', 'arccos', 'arctan', 'max', 'min', 'sup', 'inf', 'lim', 
                         'det', 'dim', 'ker', 'rank', 'trace', 'Pr', 'arg', 'gcd', 'lcm']
      functions.forEach(fn => {
        const regex = new RegExp(`\\\\${fn}(?![a-zA-Z])`, 'g')
        text = text.replace(regex, fn)
      })
      
      // 处理希腊字母
      const greekMap: {[key: string]: string} = {
        'theta': 'θ', 'Theta': 'Θ', 'alpha': 'α', 'Alpha': 'Α',
        'beta': 'β', 'Beta': 'Β', 'gamma': 'γ', 'Gamma': 'Γ',
        'delta': 'δ', 'Delta': 'Δ', 'epsilon': 'ε', 'varepsilon': 'ε',
        'Epsilon': 'Ε', 'pi': 'π', 'Pi': 'Π', 'sigma': 'σ', 'Sigma': 'Σ',
        'lambda': 'λ', 'Lambda': 'Λ', 'mu': 'μ', 'Mu': 'Μ',
        'varphi': 'φ', 'phi': 'φ', 'Phi': 'Φ', 'omega': 'ω', 'Omega': 'Ω',
        'xi': 'ξ', 'Xi': 'Ξ', 'zeta': 'ζ', 'eta': 'η', 'kappa': 'κ',
        'iota': 'ι', 'rho': 'ρ', 'tau': 'τ', 'upsilon': 'υ',
        'chi': 'χ', 'psi': 'ψ', 'Psi': 'Ψ'
      }
      Object.keys(greekMap).forEach(key => {
        text = text.replace(new RegExp(`\\\\${key}`, 'g'), greekMap[key])
      })
      
      // 处理数学运算符
      const operators: {[key: string]: string} = {
        'infty': '∞', 'sum': '∑', 'prod': '∏', 'int': '∫', 'oint': '∮',
        'iint': '∬', 'iiint': '∭', 'partial': '∂', 'nabla': '∇',
        'ell': 'ℓ', 'hbar': 'ℏ', 'Im': 'ℑ', 'Re': 'ℜ'
      }
      Object.keys(operators).forEach(key => {
        text = text.replace(new RegExp(`\\\\${key}`, 'g'), operators[key])
      })
      
      // 处理根号
      text = text.replace(/\\sqrt\[([^\]]+)\]\{([^}]+)\}/g, '$1√($2)')
      text = text.replace(/\\sqrt\{([^}]+)\}/g, '√($1)')
      
      // 处理上下标
      text = text.replace(/\^\{([^}]+)\}/g, '^($1)')
      text = text.replace(/\^([a-zA-Z0-9_]+)/g, '^$1')
      text = text.replace(/_\{([^}]+)\}/g, '_($1)')
      text = text.replace(/_([a-zA-Z0-9]+)/g, '_$1')
      
      // 处理分数
      text = text.replace(/\\frac\{([^}]+)\}\{([^}]+)\}/g, '($1)/($2)')
      
      // 处理运算符
      const opSymbols: {[key: string]: string} = {
        'cdot': '·', 'times': '×', 'div': '÷', 'pm': '±', 'mp': '∓',
        'leq': '≤', 'geq': '≥', 'neq': '≠', 'approx': '≈', 'equiv': '≡',
        'sim': '∼', 'propto': '∝', 'in': '∈', 'notin': '∉'
      }
      Object.keys(opSymbols).forEach(key => {
        text = text.replace(new RegExp(`\\\\${key}`, 'g'), opSymbols[key])
      })
      
      // 处理括号
      text = text.replace(/\\left\(/g, '(')
      text = text.replace(/\\right\)/g, ')')
      text = text.replace(/\\left\[/g, '[')
      text = text.replace(/\\right\]/g, ']')
      text = text.replace(/\\left\{/g, '{')
      text = text.replace(/\\right\}/g, '}')
      
      // 清理剩余的转义和大括号
      text = text.replace(/\{/g, '').replace(/\}/g, '').replace(/\\/g, '')
      
      this.setData({ displayText: text || formula })
    }
  },
  lifetimes: {
    attached() {
      if (this.properties.formula) {
        this.processFormula(this.properties.formula)
      }
    }
  }
})


